package juego;

import loader.CreatorByFile;
import main.ControlMain;
import main.GUIJuego;
import nivel.*;

/**
 * Juego es la clase principal de la logica encargada de inicializar a todas las
 * entidades que lo conforman.
 * 
 * @author Agustin Orge (LU.85538)
 * @author Victoria Martinez de la Cruz (LU.87620)
 */

public class Juego {

	/** Puntaje del juego. */
	protected Score puntaje;

	/** Nivel Actual. */
	protected Nivel nivelActual;

	/** GUI de la aplicacion. */
	protected GUIJuego gui;

	/** El loader por archivo. */
	protected CreatorByFile cargador;
	
	/** Controlador General*/
	protected ControlMain cont;

	// constructor

	/**
	 * Constructor de la clase juego. Se encarga de generar un nuevo Score.
	 */
	public Juego() {
		puntaje = new Score(this);
		cargador = null;
		nivelActual = null;
	}

	// comandos

	/**
	 * Inicia un juego nuevo. Se encarga de llamar al creador de niveles.
	 */
	public void juegoNuevo() {
		String path = "/archivosNiveles/nivel1-1.txt";
		cargador = new CreatorByFile(path, this);
		nivelActual = cargador.getNivel();
		
		cont = new ControlMain(nivelActual);
		Thread main = new Thread(cont);
		main.start();

	}

	/**
	 * Reporta a la ventana de la aplicacion que el jugador perdio el nivel.
	 */
	public void perdioNivel() {
		cont.terminarHilo();	
		gui.perdioNivel();
		if(puntaje.getVidas()< 1){
		puntaje.reiniciar();
	}
	}

	/**
	 * Reporta a la ventana de la aplicacion que el jugador gano el nivel.
	 */
	public void ganoNivel() {
		nivelActual = null;
		gui.ganoNivel();
	}

	/**
	 * Devuelve el nivel actual en juego.
	 * 
	 * @return nivel - nivel actual
	 */
	public Nivel getNivel() {
		return nivelActual;
	}

	/**
	 * Devuelve el puntaje actual.
	 * 
	 * @return score - puntaje actual
	 */
	public Score getScore() {
		return puntaje;
	}

	/**
	 * Modifica el atributo frame.
	 * 
	 * @param f
	 *            el frame que se almacenara.
	 * 
	 */
	public void setGUI(GUIJuego g) {
		gui = g;
	}
	/**
	 * Reinicia el puntaje del juego
	 */
	public void reiniciar() {
		puntaje.reiniciar();
		
	}

}
